/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.app.view.listener;

import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JTable;
import javax.swing.JTree;
import myftp.app.model.ExplorerTreeModel;
import myftp.app.view.ServerTabPartView;
import myftp.app.view.dialog.TemplateDialog;
import myftp.core.explorer.LocalExplorer;
import myftp.core.view.listener.FileTableListener;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 * Listener pour l'explorateur LOCAL
 */
public class LocalActionListener extends FileTableListener {

    /**

     * Explorateur local
     * @var explorer
     */
    private LocalExplorer explorer = null;

    /**
     * Constructeur LocalActionListener
     * @param localExp
     * @param tab
     */
    public LocalActionListener(LocalExplorer localExp, ServerTabPartView tab) {
        super(tab);
        this.explorer = localExp;
    }

    @Override
    public void mouseClicked(MouseEvent event) {
        if (event.getClickCount() == 2) {

            /*Récupération de la Table*/
            JTable currentTable = (JTable) event.getSource();
            doTransfert(currentTable);
        }
    }

    /**
     * Ajout d'un transfert
     * @param currentTable
     */
    public void doTransfert(JTable currentTable) {

        /* Récupération du fichier sélectionné */
        int row = currentTable.getSelectedRow();
        String file = currentTable.getValueAt(row, 0).toString();

        /* Récupération des arbres */
        JTree serverTree = tab.getServerTree();
        JTree localTree = tab.getLocalTree();

        /* Récupération des chemins */
        String pathToSource = null;
        String currentDir = null;
        currentDir = System.getProperty("user.home");

        if ((pathToSource = getPath(localTree)) == null) {
            pathToSource = currentDir;
        } else {
            pathToSource = currentDir + pathToSource;
        }
        System.out.println("path :" + pathToSource + file);

        /* Mise en paramètres du nom de fichiers et du chemin */
        this.controller.setActionParam("filename", file);
        this.controller.setActionParam("path", pathToSource);
        this.controller.setActionParam("server", this.tab.getModel());

        /* Lancement du thread de téléversement */
        this.controller.dispatch("UploadAction");
    }

    /**
     * Création d'un dossier
     * @param currentTable
     */
    public void createDir(JTable currentTable) {

        /* Demande de confirmation de la création et récupération du nom du dossier */
        String dirName = TemplateDialog.showCreateDirDialog();

        /* Si la demande de création est validé et si un nom de dossier est entré */
        if (!dirName.equals("")) {

            /* Récupération de l'arbre */
            JTree localTree = tab.getLocalTree();

            /* Récupération des chemins */
            String pathToDir = null;
            String currentDir = null;

            currentDir = System.getProperty("user.home");

            if ((pathToDir = getPath(localTree)) == null) {
                pathToDir = currentDir;
            } else {
                pathToDir = currentDir + pathToDir;
            }

            File newDir = new File(pathToDir + "/" + dirName);

            /* Création du dossier */
            if (newDir.mkdir()) {
                /* Affichage du bon déroulement de la création du dossier */
                TemplateDialog.showSuccessDialog(
                        "Le dossier \"" + dirName + "\" a été créé");
            } else {
                /* Affichage de l'erreur n'ayant pu créer le dossier */
                TemplateDialog.showInternalErrorDialog(
                        "Impossible de créer le dossier : " + dirName
                        + "\nDroits insuffisants ou dossier déjà existant");
            }
        }
    }

    /**
     * Supression d'un dossier
     * @param currentTable
     */
    public void deleteDir(JTable currentTable) {

        /* Demande de confirmation de la supression et récupération du nom du dossier */
        String dirName = TemplateDialog.showCreateDirDialog();

        /* Si la demande de supression est validé et si un nom de dossier est entré */
        if (!dirName.equals("")) {

            /* Récupération de l'arbre */
            JTree localTree = tab.getLocalTree();

            /* Récupération des chemins */
            String pathToDir = null;
            String currentDir = null;

            currentDir = System.getProperty("user.home");

            if ((pathToDir = getPath(localTree)) == null) {
                pathToDir = currentDir;
            } else {
                pathToDir = currentDir + pathToDir;
            }

            File newDir = new File(pathToDir + "/" + dirName);

            /* Suppression du dossier */
            if (newDir.delete()) {
                /* Affichage du bon déroulement de la Suppression du dossier */
                TemplateDialog.showSuccessDialog(
                        "Le dossier \"" + dirName + "\" a été supprimé");
            } else {
                /* Affichage de l'erreur n'ayant pu Supprimer le dossier */
                TemplateDialog.showInternalErrorDialog(
                        "Impossible de supprimer le dossier : " + dirName
                        + "\nDroits insuffisants ou dossier déjà existant");
            }
        }
    }

    /**
     * Supression d'un fichier
     * @param currentTable
     */
    public void deleteFile(JTable currentTable) {

        /*Récupération du fichier sélectionné*/
        int row = currentTable.getSelectedRow();
        String file = currentTable.getValueAt(row, 0).toString();

        /* Demande de confirmation de la suppression */
        Integer response = TemplateDialog.showDeleteDialog(file);
        if (response == TemplateDialog.YES_OPTION) {

            /* Récupération de l'arbre */
            JTree localTree = tab.getLocalTree();

            /* Récupération des chemins */
            String pathToFile = null;
            String currentDir = null;

            currentDir = System.getProperty("user.home");

            if ((pathToFile = getPath(localTree)) == null) {
                pathToFile = currentDir;
            } else {
                pathToFile = currentDir + pathToFile;
            }

            File fileToDelete = new File(pathToFile + "/" + file);

            /* Suppression du fichier */
            if (fileToDelete.delete()) {
                /* Affichage du bon déroulement de la Suppression du fichier */
                TemplateDialog.showSuccessDialog(
                        "Le fichier \"" + file + "\" a été supprimé");
            } else {
                /* Affichage de l'erreur n'ayant pu Supprimer le fichier */
                TemplateDialog.showInternalErrorDialog(
                        "Impossible de supprimer le fichier : " + file + "");
            }
        }
    }

    /**
     * Rafraichissement du contenu du tableau des fichiers
     * @param currentTable
     */
    public void refreshList(JTable currentTable) {

        /* Récupération de l'arbre */
        JTree localTree = tab.getLocalTree();

        /* Récupération du dossier courant */
        ExplorerTreeModel node = (ExplorerTreeModel) localTree.getLastSelectedPathComponent();

        /* Nouveau parcours du dossier courant */
        if (node == null) {
            /* Racine si c'est le cas */
            explorer.rechargement(System.getProperty("user.home") + "/");
        } else {
            /* Dernier dossier courant sinon */
            explorer.chargement(node);
        }
    }
}
